package com.webinsky.site.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.webinsky.common.proj.DelFlag;
import com.webinsky.site.domain.Site;
import com.webinsky.site.persist.dao.SiteEntityMapper;
import com.webinsky.site.persist.entity.SiteEntity;
import com.webinsky.site.service.SiteManagement;

@Service
public class SiteManagementImpl implements SiteManagement {
	@Autowired
	private SiteEntityMapper siteDao;
	
	private SiteEntity convert(Site site) {
		SiteEntity siteEntity = new SiteEntity();
		siteEntity.setDescription(site.getSiteDescription());
		siteEntity.setName(site.getSiteName());
		siteEntity.setUrl(site.getSiteUrl());
		return siteEntity;
	}
	
	private Site convert(SiteEntity siteEntity) {
		Site site = new Site();
		site.setId(siteEntity.getId());
		site.setSiteDescription(siteEntity.getDescription());
		site.setSiteName(siteEntity.getName());
		site.setSiteUrl(siteEntity.getUrl());
		site.setActived(siteEntity.getDel() == DelFlag.UNDel.getFlag()? true : false);
		return site;
	}
	
	
	@Override
	public void create(Site site) {
		if ( site != null ) {
			SiteEntity entity = convert(site);
			entity.setDel(DelFlag.UNDel.getFlag());
			siteDao.insert(entity);
			site.setId(entity.getId());
		}
	}

	@Override
	public void enDisable(int siteId, boolean enable) {
		if ( siteId > 0 ) {
			SiteEntity site = siteDao.selectById(siteId);
			if ( site != null ) {
				int del = enable ? DelFlag.UNDel.getFlag() : DelFlag.Del.getFlag();
				site.setDel(del);
				siteDao.update(site);
			}
		}
	}

	@Override
	public List<Site> getSites() {
		List<SiteEntity> siteEntities = siteDao.selectAll();
		List<Site> sites = new ArrayList<>();
		siteEntities.forEach(e -> sites.add(convert(e)));
		return sites;
	}

	@Override
	public Site load(int siteId) {
		if ( siteId <= 0 ) {
			return null;
		}
		SiteEntity siteEntity = siteDao.selectById(siteId);
		if ( siteEntity == null ) {
			return null;
		}
		Site site = new Site();
		site.setActived(siteEntity.getDel() == DelFlag.UNDel.getFlag() ? true : false);
		site.setId(siteEntity.getId());
		site.setSiteDescription(siteEntity.getDescription());
		site.setSiteName(siteEntity.getName());
		site.setSiteUrl(siteEntity.getUrl());
		return site;
	}

}
